第1章 开发基础

  1. python、javascript是动态类型的解释型语言,Swift是一个静态类型的编译语言,后者需要声明变量类型。Swift 是一种类型安全语言,不允许隐式类型转换。
  2. Optional类型的变量表示一个盒子(🎁),盒子里面可能有值,也可能是空的。必须要打开盒子🎁(解包)才能拿到里面的东西。如果不解包,直接使用,打印的是盒子,而不是盒子里的值。
  3. 在Swift中,所有变量默认必须有空值,不能随便用nil(空值),所以引入Optional表明”这个变量可能没有值“
  4. 只非optional变量不能是nil,空值必须声明为optional
  5. 使用if let 安全解包optional变量,避免nil崩溃。
var name: String? = "Swift"

//使用if let 拆包,如果不为空则把值赋给unwrappedName(注意:unwrappedName变量的scope在通过if的范围内,else范围内不存在unwrappedName这个变量名)。
if let unwrappedName = name {
	print("Hello, \(unwrappedName)!")
} else {
	print("No name provided")
}

注意:由于let声明的为常量,只能在声明时赋值一次,之后不能被改变。因此使用let声明的值,在初始化时必须赋值;而var声明的变量可以多次被赋值,因此可以在初始化时不赋值。

var name: String? = "Swift"

//用判断name是否为空的方式,并且对name进行解包,变量名+感叹号,即name!
if name != nil {
	print("Hello, \(name!)!")
} else {
	print("No name provided")
}
  1. 使用guard let 只判断是否为空值,相比if let避免多个if嵌套。但必须要在函数中使用,因为需要控制流语句(return, break, continue)提前结束作用域,必须在else中提前退出。
func checkAge() { var age: String? = nil 
	guard let unwrappedAge = age else { 
	print("None") 
	return // 提前退出 
	} 
	print("Age is \(unwrappedAge)") // 这行代码不会被执行 
}
  1. 使用??对可选变量如果是空值的情况下赋值
    注意:空合并运算符??,前后要各有一个空格
var a: Int? = nil
print(a ?? 0) // 如果a为空值nil,那么输出0